package com.ruoyi.web.petmall.pethome.service.impl;

import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.web.petmall.entity.AddressEntity;
import com.ruoyi.web.petmall.entity.UserEntity;
import com.ruoyi.web.petmall.pethome.mapper.UserInfoMapper;
import com.ruoyi.web.petmall.pethome.service.UserInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 用户信息服务实现类，提供用户信息相关的业务逻辑处理。
 */
@Service
public class UserInfoServiceImpl implements UserInfoService {

    @Autowired
    private UserInfoMapper userInfoMapper;

    /**
     * 获取当前用户的个人信息。
     *
     * @return 当前用户信息的列表。
     */
    @Override
    public List<UserEntity> getUserInfo() {
        Long userId = SecurityUtils.getLoginUser().getUserId();
        return userInfoMapper.getUserInfo(userId);
    }

    /**
     * 更新当前用户的个人信息。
     *
     * @param userEntity 包含更新信息的用户实体。
     */
    @Override
    public void updateUserInfo(UserEntity userEntity) {
        Long userId = SecurityUtils.getLoginUser().getUserId();
        userEntity.setUserId(userId);
        userInfoMapper.updateUserInfo(userEntity);
    }

    /**
     * 获取当前用户的地址信息。
     *
     * @return 当前用户地址信息的列表。
     */
    @Override
    public List<AddressEntity> getUserAddress() {
        Long userId = SecurityUtils.getLoginUser().getUserId();
        return userInfoMapper.getUserAddress(userId);
    }

    /**
     * 添加新的地址信息。
     *
     * @param addressEntity 包含地址信息的地址实体。
     */
    @Override
    public void addUserAddress(AddressEntity addressEntity) {
        Long userId = SecurityUtils.getLoginUser().getUserId();
        addressEntity.setUserId(Math.toIntExact(userId)); // 确保转换不会丢失信息
        userInfoMapper.addUserAddress(addressEntity);
    }

    /**
     * 更新现有的地址信息。
     *
     * @param addressEntity 包含更新信息的地址实体。
     */
    @Override
    public void updateUserAddress(AddressEntity addressEntity) {
        userInfoMapper.updateUserAddress(addressEntity);
    }

    /**
     * 删除指定的地址信息。
     *
     * @param id 要删除的地址ID。
     */
    @Override
    public void delUserAddress(Long id) {
        userInfoMapper.delUserAddress(id);
    }
}
